Nous allons, pour chaque paquet R sur GitHub et CRAN, identifier la date à laquelle ce paquet a été "ajouté". Ensuite, nous regarderons pour chaque paquet présent dans ces deux communautés, quels sont les paquets qui sont apparus avant dans telle ou telle communauté, et quel est le délai moyen pour apparaître dans l'autre.
In [108]:
import pandas
cran_first = pandas.DataFrame.from_csv('../data/cran-first.csv')
cran_snapshot = pandas.DataFrame.from_csv('../data/cran-snapshot.csv')
github = pandas.DataFrame.from_csv('../data/github_R_pushevents.csv')
L'analyse suivante est naïve dans le sens où elle repose, pour GitHub, sur la date du premier PushEvent enregistré (au mieux : 2013-01-01 !).
In [109]:
_ = github.query('owner != "cran" and owner != "rpkg"').drop_duplicates(('package',))[['package']]
_['github'] = _.index
github = _.set_index('package')
In [110]:
cran_first = cran_first.rename(columns={'mtime': 'cran'})[['cran']]
In [111]:
cran_snapshot['archived'] = 0
cran = cran_first.join(cran_snapshot, how='left')
In [112]:
cran = cran.fillna(1)[['cran', 'archived']]
In [113]:
packages = github.join(cran, how='inner')
In [114]:
packages['cran'] = pandas.to_datetime(packages['cran'])
In [115]:
def delta(x):
if x['github'] and x['cran']:
return x['cran'] - x['github']
else:
return pandas.np.NaN
packages['delta'] = packages.apply(delta, axis=1)
In [116]:
%matplotlib inline
In [117]:
packages['days'] = (packages['delta'].dropna() / pandas.np.timedelta64(1, 'D')).astype(int)
In [133]:
x = packages['days'].value_counts()
x = x.sort_index()
x.cumsum().plot(figsize=(15,6))
Out[133]:
In [137]:
x.cumsum().plot(figsize=(15,6), xlim=(-750, 700))
Out[137]:
In [163]:
packages['github_delta'] = packages['github'] - pandas.to_datetime('2015-01-01')
packages['github_delta'] = (packages['github_delta'].dropna() / pandas.np.timedelta64(1, 'D')).astype(int)
packages['cran_delta'] = packages['cran'] - pandas.to_datetime('2015-01-01')
packages['cran_delta'] = (packages['cran_delta'].dropna() / pandas.np.timedelta64(1, 'D')).astype(int)
packages.plot(kind='scatter', x='github_delta', y='cran_delta', figsize=(15,15))
Out[163]:
In [164]:
packages.plot(kind='scatter', x='github_delta', y='cran_delta', figsize=(15,15), xlim=(-800,200), ylim=(-800,200))
Out[164]: